package com.zhangh.summer.admin.support.ds.mysql.mapper;


import com.zhangh.summer.admin.support.ds.common.pager.DataPager;
import com.zhangh.summer.admin.support.ds.common.pager.Pager;
import com.zhangh.summer.admin.support.ds.mysql.common.DataSourceSupport;
import com.zhangh.summer.admin.support.spring.util.SpringBeanUtil;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.session.RowBounds;

import java.util.List;


public class BizMapper implements  IBizMapper {
	private String namespace;
	private static final DataSourceSupport dataSourceSupport= SpringBeanUtil.getBeanByType(DataSourceSupport.class);
	/**
	 * 构建无分表 自定义sql mapper
	 * @param namespace 命名空间
	 */
	public BizMapper(String namespace){
		this.namespace=namespace;
		//this.dataSourceSupport= SpringBeanUtil.getBeanByType(DataSourceSupport.class);
	}
	/**
	 * 插入数据
	 * @param insertId 插入ID
	 * @param parameter 参数
	 * @return
	 */
	public int insert(String insertId, Object parameter) {
		insertId=namespace+"."+insertId;
		return dataSourceSupport.insert(insertId, parameter);
	}

	/**
	 * 更新数据
	 * @param updateId 更新ID
	 * @param parameter 参数
	 * @return
	 */
	public int update(String updateId, Object parameter) {
		updateId=namespace+"."+updateId;
		return dataSourceSupport.update(updateId, parameter);
	}

	/**
	 * 删除数据
	 * @param deleteId 删除ID
	 * @param parameter 参数
	 * @return
	 */
	public int delete(String deleteId, Object parameter) {
		deleteId=namespace+"."+deleteId;
		return dataSourceSupport.delete(deleteId, parameter);
	}

	/**
	 * 查询一条数据对象
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param <M>
	 * @return
	 */
	public <M> M selectOne(String selectId, Object parameter) {
		selectId=namespace+"."+selectId;
		return dataSourceSupport.selectOne(selectId, parameter);
	}

	/**
	 * 查询数据对象集合
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param <M> 数据对象泛型
	 * @return
	 */
	public <M> List<M> selectList(String selectId, Object parameter) {
		selectId=namespace+"."+selectId;

		return dataSourceSupport.selectList(selectId, parameter);
	}

	/**
	 * 查询数据集合第一条数据
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param <M> 数据对象泛型
	 * @return
	 */
	public <M> M  selectFirstFromList(String selectId, Object parameter) {
		selectId=namespace+"."+selectId;
		RowBounds rowBounds = new RowBounds(1, 1);
		List<M> ls=this.dataSourceSupport.selectLimitedList(selectId, parameter, rowBounds);
		if(ls.size()>0){
			return  ls.get(0);
		}
		return null;
	}

	/**
	 * 分页查询数据集合
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param page 页数
	 * @param size 每页大小
	 * @param <M> 数据对象泛型
	 * @return
	 */
	public <M> List<M> selectListForPage(String selectId, Object parameter, int page, int size) {
		selectId=namespace+"."+selectId;
		RowBounds rowBounds=new RowBounds(page,size);
		return dataSourceSupport.selectLimitedList(selectId, parameter, rowBounds);
	}

	/**
	 * 分页查询数据集合
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param rowBounds 分页对象
	 * @param <M> 数据对象泛型
	 * @return
	 */
	public <M> List<M> selectLimitedList(String selectId,Object parameter, RowBounds rowBounds) {
		selectId=namespace+"."+selectId;
		return dataSourceSupport.selectLimitedList(selectId, parameter, rowBounds);
	}

	/**
	 * 查询分页对象 DataPager
	 * @param selectId 查询ID
	 * @param parameter 参数
	 * @param pager 分页对象
	 * @param <M> 数据对象泛型
	 * @return
	 */
	public <M> DataPager<M> selectDataPager (String selectId, Object parameter, Pager pager){
		selectId=namespace+"."+selectId;
		RowBounds rowBounds = new RowBounds(pager.getPage(), pager.getSize());
		List<M> ls=dataSourceSupport.selectLimitedList(selectId, parameter, rowBounds);

		DataPager dataPager=new DataPager(pager);
		dataPager.setRows(ls);
		PageInfo page = new PageInfo(ls);
		dataPager.setTotalPage(page.getPages());
		dataPager.setTotal(page.getTotal());
		return  dataPager;
	}

	/**
	 * 查询总数
	 * @param countId 查询ID
	 * @param parameter 参数
	 * @return
	 */
	public long selectCount(String countId, Object parameter) {
		countId=namespace+"."+countId;
		return dataSourceSupport.selectOne(countId, parameter);
	}
}
